package com.tedu.review.day02;
/**
 * 类的创建过程（JVM虚拟机--内存创建流程：栈，堆，方法区）
 * 1.从程序入口 加载xxx。class文件，类对象存到方法区中【方法区：并存】
 * 2.如果发现加载xxx。class文件中，存在static静态块，存入方法区创建对象之前提前调用
 * 3.发现cs的引用，将这个引用转为地址值：0x000，存入栈内存【栈区：并存】
 * 4.发现new 对象（），在堆内存中，给对象申请【随意】空间
 *   理解：宾馆，很多屋子  前台服务员【引用】---来个客人【new】，随便开个房
 * 5.类的创建【实例化】执行步骤：先执行方法区：静态块--》执行普通代码块--》初始化
 * 6.给栈中生成的地址值进行指向，堆内存中随意开辟的空间（初始值）【与栈内存地址一致】
 * 7.给栈中生成的地址值进行指向，堆内存中随意开辟的空间（复值）【与栈内存地址一致】
 *
 * 调用过程;
 * 1.栈：编译器自动分配，使用完毕自动释放
 * 2.堆：一般由测序员分配释放，若程序员没有释放，java程序自动进行垃圾回收
 *                                      GC垃圾回收
 * 3.全局区（静态区）；全局变量和静态变量在内存中存在一起的
 *                 初始化的全局变量和静态变量存在一起的
 *                 未初始化的全局变量和未初始化的静态变量在相邻的另一个区域
 *                 ----程序结束
 * 4.常量池：存在方法区中   --程序结束   释放【javapal  字符串】
 */
public class 类的创建过程 {
    public static void main(String[] args){
        /*完成一次创建对象*/
        CountrySide cs=new CountrySide();
    }
}
/*测试    一个Java文件里面创建两个类*/
class CountrySide{
    /*代码块*/
    {
        System.out.println("你好");
    }
    /*静态代码块*/
    static{
        System.out.println("哈喽");
    }
    /*1.成员变量：变量，类中存在变量就是成员变量，可以由修饰符修饰 */
    private  String name="哈哈";
    private  int age=56;
    /*2，构造器/构造方法/句柄：创建对象初始化*/
    public CountrySide(){
        name="嗯";
        System.out.println(name+"可以在外说");
    }
}
